package org.duiduo.interceptor;

import org.duiduo.annotation.AuthLogin;
import org.duiduo.pojo.TbUser;
import org.springframework.stereotype.Service;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Service
public class AuthLoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

        if (handler instanceof HandlerMethod) {
            HandlerMethod handlerMethod = (HandlerMethod) handler;
            // 拦截所有的请求方法，是否需要登录
            AuthLogin authLoginMethod = handlerMethod.getMethod().getAnnotation(AuthLogin.class);
            // 如果不为空 并且为 false 不需要登录
            if (authLoginMethod != null && !authLoginMethod.needLogin()) {
                // 放行 不拦截
                return true;
            }
            // 拦截整个模块，是否需要登录
            AuthLogin authLoginClass = handlerMethod.getBeanType().getAnnotation(AuthLogin.class);
            // 如果不为空 并且为 false 不需要登录
            if (authLoginClass != null && !authLoginClass.needLogin()) {
                // 放行 不拦截
                return true;
            }

            /**
             *  以下都是需要登录 验证登录信息
             */

            // 取出用户
            Object user = request.getSession().getAttribute("USER");
            if (user instanceof TbUser) {
                // 放行 不拦截
                return true;
            }
        }
        // 上面验证都不通过 拦截 并跳转登录页面
        try {
            response.sendRedirect(request.getContextPath() + "/login/toLogin");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

}
